<?php

namespace app\wap\controller;
use think\Controller;

class Base extends Controller
{
    public  $user=[];
    public $wx_config=[];
    public function _initialize()
    {

        $config = cache('db_config_data');

        if(!$config){
            $config = api('Config/lists');
            cache('db_config_data',$config);
        }
        config($config);

        $this->wx_config= [
            'token'             => config('wx_token'), // 填写你设定的key
            'appid'             => config('wx_appid'), // 填写高级调用功能的app id, 请在微信开发模式后台查询
            'appsecret'         => config('wx_appsecret'), // 填写高级调用功能的密钥
            'encodingaeskey'    => config('wx_encodingaeskey'), // 填写加密用的EncodingAESKey（可选，接口传输选择加密时必需）
            'mch_id'            => config('wx_mch_id'), // 微信支付，商户ID（可选）
            'partnerkey'        => config('wx_partnerkey'), // 微信支付，密钥（可选）
            'ssl_cer'           =>  config('wx_ssl_cer'), // 微信支付，证书cert的路径（可选，操作退款或打款时必需）
            'ssl_key'           =>  config('wx_ssl_key'), // 微信支付，证书key的路径（可选，操作退款或打款时必需）
            //    'cachepath'         => config('wx_appid'), // 设置SDK缓存目录（可选，默认位置在./src/Cache下，请保证写权限）
        ];
        $this->wxConfig= [
            'use_sandbox'       => false,// 是否使用 微信支付仿真测试系统
            'app_id'            => config('wx_appid'),  // 公众账号ID
            'mch_id'            => config('wx_mch_id'),// 商户id
            'md5_key'           => config('wx_partnerkey'),// md5 秘钥
            'app_cert_pem'      => CACERT_PATH. 'wx_apiclient_cert.pem',
            'app_key_pem'       => CACERT_PATH . 'wx_apiclient_key.pem',
            'sign_type'         => 'MD5',// MD5  HMAC-SHA256
            'limit_pay'         => [
                //'no_credit',
            ],// 指定不能使用信用卡支付   不传入，则均可使用
            'fee_type'          => 'CNY',// 货币类型  当前仅支持该字段

            'notify_url'        => config('wx_notify_url'),

            'redirect_url'      =>config('wx_redirect_url'),// 如果是h5支付，可以设置该值，返回到指定页面

            'return_raw'        => true,// 在处理回调时，是否直接返回原始数据，默认为true
        ];

    }
    protected function is_login(){
        if(session('mid')){
            $this->user=[
                'nickname' => session('nickname'),
                'mid'=>  session('mid') ,
                'head_img'=>session('head_img'),
                'group_id'=>session('group_id'),
                'money'=>session('money'),

            ];
            $this->assign($this->user);
            return true;
        }else{
            $this->wx_login();
        }
    }
    protected  function logout(){
        session('mid', null);
        session('nickname', null);
        session('head_img ',null);
        session('group_id ',null);
        session('money ',null);

    }
    public function wx_login(){

        $WechatService=new \Wechat\WechatOauth($this->wx_config);

        if(!session('redirect_url')){
            session('redirect_url',$_SERVER["REQUEST_SCHEME"].'://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]);
        }

        if (isset($_GET['code']) && $_GET['code'] != 'authdeny') {
            $token = $WechatService->getOauthAccessToken();
            if ($token) {
                $userinfo = $WechatService->getOauthUserInfo($token['access_token'],$token['openid']);
                $this->update_weixin_user($userinfo);
                if (session('redirect_url')) {
                    $redirect_url = session('redirect_url');
                    header('Location:' . $redirect_url, true, 302);
                    exit();
                }
            } else {
                $url=$WechatService->getOauthRedirect(url('wap/base/wx_login','','',true),'','snsapi_userinfo');
                header('Location:' . $url, true, 302);
                exit();
            }
        }else{

            $url=$WechatService->getOauthRedirect(url('wap/base/wx_login','','',true),'','snsapi_userinfo');
            header('Location:' . $url, true, 302);
            exit();
        }



    }
    /**
     * 更新微信用户信息
     *
     * @param unknown $userinfo
     * @param unknown $wechat_id
     * @param unknown $weObj
     */
    protected function update_weixin_user($userinfo)
    {


        $ret = db('oauth_member')->field('id,mid')->where(['openid'=>$userinfo['openid']])->find();
        $userinfo['nickname'] = preg_replace('~\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]~', '', $userinfo['nickname']);

        //如果数据库有该用户
        if ($ret) {
            //说明用户 存在
            if($ret['mid']>0){
                $user=db('member')->find($ret['mid']);
                if(isset($user['status'])&& $user['status']==0){
                    die("你的帐号被禁用，请联系管理员");
                }
                db('member')->where(['id'=>$user['id']])->update(['login_num'=>$user['login_num']+1]);

                session('mid', $ret['mid']);
                session('nickname', $user['nickname']);
                session('head_img',$user['head_img']);
                session('group_id',$user['group_id']);
                session('money',$user['money']);

            }else{
                //不存在了 直接创建关联
                $mid=db('member')->insert([
                    'nickname'=>$userinfo['nickname'],
                    'sex'=>$userinfo['sex'],
                    'group_id'=>'1',
                    'head_img'=>$userinfo['headimgurl'],
                    'create_time'=>time(),
                    'update_time'=>time(),
                    'login_num'=>1,
                    'status'=>1
                ],false,true);
                //在更新微信表的MID
                db('oauth_member')->where(['id'=>$ret['id']])->update(['mid'=>$mid]);
                session('mid', $mid);
                session('nickname', $userinfo['nickname']);
                session('head_img',$userinfo['headimgurl']);
                session('group_id',1);
                session('money',0);

            }

        } else {
            //先插入到微信表内
            $wid=db('oauth_member')->insert(
                [
                    'type'=>1,
                    'openid'=>$userinfo['openid'],
                    'nickname'=>$userinfo['nickname'],
                    'sex'=>$userinfo['sex'],
                    'city'=>$userinfo['city'],
                    'province'=>$userinfo['province'],
                    'headimgurl'=>$userinfo['headimgurl'],
                    'create_time'=>time(),
                    'update_time'=>time()
                ],false,true
            );
            //在插入到 member表内
            if($wid){
                $mid=db('member')->insert([
                    'nickname'=>$userinfo['nickname'],
                    'sex'=>$userinfo['sex'],
                    'group_id'=>'1',
                    'head_img'=>$userinfo['headimgurl'],
                    'create_time'=>time(),
                    'update_time'=>time(),
                    'login_num'=>1,
                    'status'=>1
                ],false,true);
                //在更新微信表的MID
                db('oauth_member')->where(['id'=>$wid])->update(['mid'=>$mid]);
                session('mid', $mid);
                session('nickname', $userinfo['nickname']);
                session('head_img',$userinfo['headimgurl']);
                session('group_id',1);
                session('money',0);

            }
        }


    }


}